/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package validadores.validadoresformato;

/**
 *
 * @author Steve
 */
public class EnteroValidador implements validadores.ValidadorFormato {

    String sugerencia;
    String mensajeError;
    int min;
    int max;
    CONFIGURACIONES opcionesValidacion;

    /**
     * Enumeracion que contiene las distintas validaciones que pueden
     * realizarse en EnteroValidador
     */
    public enum CONFIGURACIONES {

        /**
         * Esta configuracion incluye numeros mayores o iguales a 0
         */
        POSITIVO,
        /**
         * Incluye numeros menores a 0
         */
        NEGATIVO,
        /**
         * Incluye numeros en un rango definido
         */
        RANGO,
        /**
         * no establece limite al numero
         */
        SIN_LIMITE
    }

    /**
     * Constructor de la clase
     * @param sugerencia mensaje de sugerencia
     * @param opConfiguraciones CONFIGURACIONES utilizadas para la validacion
     * @param mensajeError mensaje de error en caso de no cumplir la
     * validacion de formato
     */
    public EnteroValidador(String sugerencia, CONFIGURACIONES opConfiguraciones, String mensajeError) {
        this.sugerencia = sugerencia;
        this.mensajeError = mensajeError;
        this.opcionesValidacion = opConfiguraciones;
    }

    /**
     * Constructor de la clase, diseñado para validar un rango de enteros
     * @param sugerencia mensaje de sugerencia
     * @param min limite inferior del rango a validar
     * @param max limite superior del rango a validar
     * @param mensajeError mensaje de error en caso de no cumplir la
     * validacion de formato
     */
    public EnteroValidador(String sugerencia, int min, int max, String mensajeError) {
        this(sugerencia, CONFIGURACIONES.RANGO, mensajeError);
        setMin(min);
        setMax(max);
    }

    public void setSugerencia(String sugerencia) {
        this.sugerencia = sugerencia;
    }

    public String getSugerencia() {
        return sugerencia;
    }

    public void setMensajeError(String mensaje) {
        mensajeError = mensaje;
    }

    public String getMensajeError() {
        return mensajeError;
    }

    /**
     * Obtiene el limite maximo del rango a validar
     * @return limite superior
     */
    public int getMax() {
        return max;
    }

    /**
     * Establece el limite maximo del rango a validar
     * @param max limite maximo
     */
    public void setMax(int max) {
        this.max = max;
    }

    /**
     * Obtiene el limite inferior del rango a validar
     * @return limite inferior
     */
    public int getMin() {
        return min;
    }

    /**
     * Establece el limite inferior del rango a validar
     * @param min limite inferior
     */
    public void setMin(int min) {
        this.min = min;
    }

    /**
     * Obtiene el tipo de validacion que se realizara
     * @return
     */
    public CONFIGURACIONES getOpcionesValidacion() {
        return opcionesValidacion;
    }

    /**
     * Establece que tipo de validacion se realizara
     * @param opcionesValidacion
     */
    public void setOpcionesValidacion(CONFIGURACIONES opcionesValidacion) {
        this.opcionesValidacion = opcionesValidacion;
    }

    public boolean validar(String texto) {
        boolean ret = false;
        int numero;
        try {
            numero = Integer.parseInt(texto);

            switch (getOpcionesValidacion()) {
                case NEGATIVO:
                    ret = validarNegativo(numero);
                    break;
                case POSITIVO:
                    ret = validarPositivo(numero);
                    break;
                case RANGO:
                    ret = validarRango(numero);
                    break;
            }
        } catch (NumberFormatException ex) {
            //valor ingresado no es un entero, se establece el mensaje de error
            ret = false;
        }
        return ret;
    }

    /**
     * Valida si un numero es negativo (<=0)
     * @param numero entero a validar
     * @return
     */
    private boolean validarNegativo(int numero) {
        boolean ret = false;
        if (numero <= 0) {
            ret = true;
        }
        return ret;
    }

    /**
     * Valida si un numero es positivo (>=0)
     * @param numero entero a validar
     * @return
     */
    private boolean validarPositivo(int numero) {
        boolean ret = false;
        if (numero >= 0) {
            ret = true;
        }
        return ret;
    }

    /**
     * valida si un entero esta dentro de un rango
     * @param numero entero a validar
     * @return
     */
    private boolean validarRango(int numero) {
        boolean ret = false;
        if (numero >= min && numero <= max) {
            ret = true;
        }
        return ret;
    }
}
